package API.RegexDome;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * ClassName:RegexText011
 * Package:API.RegexDome
 * Description:
 *
 * @Author:ZhangXin
 * @Create2023/2/1-19:38
 * @Version:v1.0
 */
public class RegexText011 {
    /*
     * 带条件的数据爬取
     * 有如下文本,请按照要求爬取数据
     *   Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这
     * 两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
     *
     * 需求1：爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号
     * 需求2：爬取版本号为8,11,17的Java文本.正确爬取结果为：Java8 Java11 Java17 Java17
     * 需求3：爬取除了版本号为8,11,17的Java文本
     * */

    public static void main(String[] args) {
        String s = " java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为这\n" +
                    "  两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台";

        //1.定义正则表达式
        //这里的问号理解为前面的数据Java
        //但是在获取的时候,只截取前面半部分
        //需求1：
        String regex001 = "((?i)Java)(?=8|11|17)";
        //需求2：
        String regex002 = "((?i)Java)(8|11|17)";
        String regex003 = "((?i)Java)(?:8|11|17)";
        //需求3：
        String regex004 = "((?i)Java)(?!8|11|17)";
        //获取正则表达式的对象
        Pattern pattern001 = Pattern.compile(regex001);
        Pattern pattern002 = Pattern.compile(regex002);
        Pattern pattern003 = Pattern.compile(regex004);
        //获取文本匹配器的对象
        //利用m去读取s,会按照p的规则找里面的小串
        Matcher m = pattern003.matcher(s);
        //利用循环获取每一个数据
        System.out.println("=============");
        while (m.find()){
            String str1 = m.group();
            System.out.println(str1);
        }



    }
}
